home *** CD-ROM | disk | FTP | other *** search
/ Monster Media 1996 #15 / Monster Media Number 15 (Monster Media)(July 1996).ISO / bbs_util / bsrc_260.zip / SRC.ZIP / VFOSSIL.C < prev    next >
C/C++ Source or Header  |  1996-03-23  |  10KB  |  413 lines

  1. /*--------------------------------------------------------------------------*/
  2. /*                                                                          */
  3. /*                                                                          */
  4. /*      ------------         Bit-Bucket Software, Co.                       */
  5. /*      \ 10001101 /         Writers and Distributors of                    */
  6. /*       \ 011110 /          Freely Available<tm> Software.                 */
  7. /*        \ 1011 /                                                          */
  8. /*         ------                                                           */
  9. /*                                                                          */
  10. /*              (C) Copyright 1987-96, Bit Bucket Software Co.              */
  11. /*                                                                          */
  12. /*           This module was originally written by Bob Hartman              */
  13. /*                                                                          */
  14. /*                       BinkleyTerm VFOSSIL module                         */
  15. /*                                                                          */
  16. /*                                                                          */
  17. /*    For complete  details  of the licensing restrictions, please refer    */
  18. /*    to the License  agreement,  which  is published in its entirety in    */
  19. /*    the MAKEFILE and BT.C, and also contained in the file LICENSE.260.    */
  20. /*                                                                          */
  21. /*    USE  OF THIS FILE IS SUBJECT TO THE  RESTRICTIONS CONTAINED IN THE    */
  22. /*    BINKLEYTERM  LICENSING  AGREEMENT.  IF YOU DO NOT FIND THE TEXT OF    */
  23. /*    THIS  AGREEMENT IN ANY OF THE  AFOREMENTIONED FILES,  OR IF YOU DO    */
  24. /*    NOT HAVE THESE FILES,  YOU  SHOULD  IMMEDIATELY CONTACT BIT BUCKET    */
  25. /*    SOFTWARE CO.  AT ONE OF THE  ADDRESSES  LISTED BELOW.  IN NO EVENT    */
  26. /*    SHOULD YOU  PROCEED TO USE THIS FILE  WITHOUT HAVING  ACCEPTED THE    */
  27. /*    TERMS  OF  THE  BINKLEYTERM  LICENSING  AGREEMENT,  OR  SUCH OTHER    */
  28. /*    AGREEMENT AS YOU ARE ABLE TO REACH WITH BIT BUCKET SOFTWARE, CO.      */
  29. /*                                                                          */
  30. /*                                                                          */
  31. /* You can contact Bit Bucket Software Co. at any one of the following      */
  32. /* addresses:                                                               */
  33. /*                                                                          */
  34. /* Bit Bucket Software Co.        FidoNet  1:104/501, 1:343/491             */
  35. /* P.O. Box 460398                AlterNet 7:42/1491                        */
  36. /* Aurora, CO 80046               BBS-Net  86:2030/1                        */
  37. /*                                Internet f491.n343.z1.fidonet.org         */
  38. /*                                                                          */
  39. /* Please feel free to contact us at any time to share your comments about  */
  40. /* our software and/or licensing policies.                                  */
  41. /*                                                                          */
  42. /*--------------------------------------------------------------------------*/
  43.  
  44. /* Include this file before any other includes or defines! */
  45.  
  46. #include "includes.h"
  47.  
  48. extern VIOMODEINFO vfos_mode;
  49.  
  50. #ifdef OS_2
  51. /*PLF Fri  05-05-1989  05:35:11 OS/2 version notes:
  52.  *
  53.  * I have basically made this two completely different versions. A lot
  54.  * of the original real mode version deals with the case when vfossil
  55.  * does not exist. Under OS/2, it is always active.
  56.  *
  57.  */
  58.  
  59. extern int vfossil_installed;
  60.  
  61. void 
  62. vfossil_init (void)
  63. {
  64.     PVIOMODEINFO q;
  65.  
  66.     vfossil_installed = 1;
  67.     q = (PVIOMODEINFO) & vfos_mode;
  68.     vfos_mode.cb = sizeof (VIOMODEINFO);
  69.     VioGetMode (q, 0);
  70.     VioSetAnsi (ANSI_ON, 0);
  71. }
  72.  
  73. void 
  74. vfossil_cursor (int st)
  75. {
  76.     VIOCURSORINFO cur;
  77.  
  78.     VioGetCurType (&cur, 0);
  79.     cur.attr = (USHORT) (st ? 0 : -1);
  80.     VioSetCurType (&cur, 0);
  81. }
  82.  
  83. void 
  84. vfossil_close (void)
  85. {
  86.     vfossil_cursor (1);
  87.     vfossil_installed = 0;
  88. }
  89.  
  90. void 
  91. fossil_gotoxy (int col, int row)
  92. {
  93.     VioSetCurPos ((USHORT) row, (USHORT) col, 0);
  94. }
  95.  
  96. int 
  97. fossil_wherex (void)
  98. {
  99.     USHORT row, col = 0;
  100.  
  101.     VioGetCurPos ((PUSHORT) & row, (PUSHORT) & col, 0);
  102.     return (col);
  103. }
  104.  
  105. int 
  106. fossil_wherey (void)
  107. {
  108.     USHORT row = 0, col;
  109.  
  110.     VioGetCurPos ((PUSHORT) & row, (PUSHORT) & col, 0);
  111.     return (row);
  112. }
  113.  
  114. #ifdef BINKLEY_SOUNDS            /* MB 93-12-18 */
  115.  
  116. static HMODULE ModHandle = NULL;
  117. static ULONG (*APIENTRY mciSendString) (PSZ pszCommandBuf,
  118.     PSZ pszReturnString,
  119.     USHORT wReturnLength,
  120.     HWND hwndCallBack,
  121.     USHORT usUserParm);
  122.  
  123. static BOOL mmpm_unavail = FALSE;
  124.  
  125. void
  126. Make_Sound (char *WaveFile)
  127. {
  128.     APIRET rc;
  129.     PSZ MMPM_ERROR = "!%s Error %d initializing MMPM/2 support";
  130.  
  131.     char mciStr[100];
  132.     char mciAlias[8];
  133.  
  134.     if (WaveFile == NULL || mmpm_unavail)
  135.         return;
  136.  
  137.     if (!ModHandle)
  138.     {
  139.         /* load the MMPM/2 MDM.DLL */
  140.  
  141.         if (rc = DosLoadModule (mciStr, sizeof (mciStr), "MDM", &ModHandle))
  142.         {
  143.             status_line (MMPM_ERROR, "DosLoadModule", rc);
  144.             mmpm_unavail = TRUE;
  145.             return;
  146.         }
  147.  
  148.         /* get the mciSendString entry point */
  149.  
  150.         if (rc = DosQueryProcAddr (ModHandle, 0L, "mciSendString",
  151.             (PFN *) & mciSendString))
  152.         {
  153.             status_line (MMPM_ERROR, "DosQueryProcAddr", rc);
  154.             DosFreeModule (ModHandle);
  155.             mmpm_unavail = TRUE;
  156.             return;
  157.         }
  158.     }
  159.  
  160.     /* Create an alias for talking to mciSendString */
  161.  
  162.     sprintf (mciAlias, "bt%02xsnd", TaskNumber);
  163.  
  164.     /* Open the file */
  165.  
  166.     sprintf (mciStr, "open %s alias %s wait", WaveFile, mciAlias);
  167.     if (!mciSendString ((PSZ) mciStr, (PSZ) NULL, 0, (HWND) 0, 0))
  168.     {
  169.         /* Play the file */
  170.  
  171.         sprintf (mciStr, "play %s wait", mciAlias);
  172.         mciSendString ((PSZ) mciStr, (PSZ) NULL, 0, (HWND) 0, 0);
  173.  
  174.         /* Close the file */
  175.  
  176.         sprintf (mciStr, "close %s wait", mciAlias);
  177.         mciSendString ((PSZ) mciStr, (PSZ) NULL, 0, (HWND) 0, 0);
  178.     }
  179. }
  180. #endif /* BINKLEY_SOUNDS */
  181. #endif /* OS_2 */
  182.  
  183. #ifdef _WIN32
  184.  
  185. extern int vfossil_installed;
  186.  
  187. void 
  188. vfossil_init (void)
  189. {
  190. #if 0
  191.     PVIOMODEINFO q;
  192.  
  193.     vfossil_installed = 1;
  194.     q = (PVIOMODEINFO) & vfos_mode;
  195.     vfos_mode.cb = sizeof (VIOMODEINFO);
  196.     VioGetMode (q, 0);
  197.     VioSetAnsi (ANSI_ON, 0);
  198. #endif
  199. }
  200.  
  201. void 
  202. vfossil_cursor (int st)
  203. {
  204. #if 0
  205.     VIOCURSORINFO cur;
  206.  
  207.     VioGetCurType (&cur, 0);
  208.     cur.attr = (USHORT) (st ? 0 : -1);
  209.     VioSetCurType (&cur, 0);
  210. #endif
  211. }
  212.  
  213. void 
  214. vfossil_close (void)
  215. {
  216.     vfossil_cursor (1);
  217.     vfossil_installed = 0;
  218. }
  219.  
  220. void 
  221. fossil_gotoxy (int col, int row)
  222. {
  223. #if 0
  224.     VioSetCurPos ((USHORT) row, (USHORT) col, 0);
  225. #endif
  226. }
  227.  
  228. int 
  229. fossil_wherex (void)
  230. {
  231.     return 1;
  232. #if 0
  233.     USHORT row, col;
  234.  
  235.     VioGetCurPos ((PUSHORT) & row, (PUSHORT) & col, 0);
  236.     return (col);
  237. #endif
  238. }
  239.  
  240. int 
  241. fossil_wherey (void)
  242. {
  243.     return 1;
  244. #if 0
  245.     USHORT row, col;
  246.  
  247.     VioGetCurPos ((PUSHORT) & row, (PUSHORT) & col, 0);
  248.     return (row);
  249. #endif
  250. }
  251.  
  252. USHORT 
  253. VioWrtTTY (PCH pchString, USHORT cbString, USHORT hvio)
  254. {
  255.     return 0;
  256. }
  257.  
  258. USHORT 
  259. VioWrtCellStr (PCH pchCellString, USHORT cbCellString, USHORT usRow, USHORT usColumn, USHORT hvio)
  260. {
  261.     return 0;
  262. }
  263. #endif
  264.  
  265. #ifdef DOS16
  266.  
  267. USHORT far pascal write_screen (PCH, USHORT, USHORT, USHORT, USHORT);
  268. USHORT far pascal write_chars (PCH, USHORT, USHORT, USHORT, USHORT);
  269. USHORT far pascal video_mode (PVIOMODEINFO, USHORT);
  270.  
  271. void 
  272. vfossil_init ()
  273. {
  274.     char far *q;
  275.     union REGS inregs, outregs;
  276.     struct SREGS s;
  277.     VFOSSIL v;
  278.  
  279.     v.vfossil_size = sizeof (VFOSSIL);
  280.     q = (char far *) &v;
  281.  
  282.     vfossil_installed = 0;
  283.  
  284.     inregs.h.ah = 0x81;
  285.     inregs.h.al = 0;
  286.  
  287.     segread (&s);
  288.     s.es = FP_SEG (q);
  289.     inregs.x.di = FP_OFF (q);
  290.     (void) int86x (0x14, &inregs, &outregs, &s);
  291.  
  292.     if (outregs.x.ax == 0x1954)
  293.     {
  294.         /* There is a VFOSSIL out there, so set it up for use */
  295.         inregs.h.al = 1;
  296.         inregs.x.cx = 80;
  297.         q = (char far *) &vfossil_funcs;
  298.         inregs.x.di = FP_OFF (q);
  299.         s.es = FP_SEG (q);
  300.         (void) int86x (0x14, &inregs, &outregs, &s);
  301.         if ((outregs.x.ax == 0x1954) && (outregs.x.bx >= 14))
  302.         {
  303.             /* It is really out there */
  304.             vfossil_installed = 1;
  305.             q = (char far *) &vfos_mode;
  306.             vfos_mode.cb = sizeof (VIOMODEINFO);
  307.             (void) VioGetMode ((PVIOMODEINFO) q, 0);
  308.         }
  309.     }
  310.  
  311.     if (!vfossil_installed)
  312.     {
  313.         (void) memset ((char *) &vfossil_funcs, 0, sizeof (vfossil_funcs));
  314.         vfossil_funcs.GetMode = video_mode;
  315.         vfossil_funcs.WrtCellStr = write_screen;
  316.         vfossil_funcs.WrtCharStr = write_chars;
  317.     }
  318. }
  319.  
  320. void 
  321. vfossil_cursor (int st)
  322. {
  323.     CURSOR cur;
  324.  
  325.     if ((long) vfossil_funcs.GetCurType)
  326.     {
  327.         /* We can make the cursor go away */
  328.         (void) VioGetCurType (&cur, 0);
  329.         cur.cur_attr = st ? 0 : -1;
  330.         (void) VioSetCurType (&cur, 0);
  331.     }
  332. }
  333.  
  334. void 
  335. vfossil_close ()
  336. {
  337.     union REGS r;
  338.  
  339.     vfossil_cursor (1);
  340.  
  341.     r.h.ah = 0x81;
  342.     r.h.al = 2;
  343.  
  344.     (void) int86 (0x14, &r, &r);
  345.  
  346.     vfossil_installed = 0;
  347. }
  348.  
  349. USHORT far pascal 
  350. video_mode (PVIOMODEINFO s, USHORT h)
  351. {
  352.     if (s->cb < 8)
  353.     {
  354.         return (382);
  355.     }
  356.  
  357.     if (h != 0)
  358.     {
  359.         return (436);
  360.     }
  361.  
  362.     s->fbType = 1;
  363.     s->color = 1;
  364.     s->col = 80;
  365.     s->row = 23;
  366.     return (0);
  367. }
  368.  
  369. USHORT far pascal 
  370. write_screen (PCH s, USHORT l,
  371.     USHORT r, USHORT c, USHORT h)
  372. {
  373.     USHORT i;
  374.     int far *p;
  375.  
  376.     p = (int far *) s;
  377.  
  378.     /* The following line is just to make -W3 happy */
  379.     i = h;
  380.  
  381.     gotoxy (c, r);
  382.  
  383.     l = l / 2;
  384.     for (i = 0; i < l; i++)
  385.     {
  386.         (void) WRITE_BIOS (*p);
  387.         ++p;
  388.     }
  389.  
  390.     return (0);
  391. }
  392.  
  393. USHORT far pascal 
  394. write_chars (PCH s, USHORT l,
  395.     USHORT r, USHORT c, USHORT h)
  396. {
  397.     USHORT i;
  398.  
  399.     /* The following line is just to make -W3 happy */
  400.     i = h;
  401.  
  402.     gotoxy (c, r);
  403.  
  404.     for (i = 0; i < l; i++)
  405.     {
  406.         (void) WRITE_BIOS (*s);
  407.         ++s;
  408.     }
  409.  
  410.     return (0);
  411. }
  412. #endif                            /*defined DOS16 */
  413.